package Controller;

import IHM.Fenetre;
import IHM.actionListener;
import java.io.File;
import java.util.ArrayList;
import Modele.Pair;
//import com.sun.tools.javac.util.Pair;

import Modele.gestModele;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
/**
 * Classe qui recoit les actions de l'utilisateur sur l'IHM
 * @author philippestepniewski
 */
public class gestControler implements ActionListener,IControle
{
	private ArrayList<ArrayList<ArrayList<double[]>>> activation;
	private ArrayList<Pair<Integer,Integer>> classif;
        private ArrayList<Double> erreur;
	private gestModele modele;
        private Fenetre ihm;

        /**
         * Constructeur de la classe.
         * @param ihm: l'ihm à laquelle est lié le constructeur.
         */
	public gestControler(Fenetre ihm)
	{
		activation = new ArrayList<ArrayList<ArrayList<double[]>>>();
		classif = new ArrayList<Pair<Integer,Integer>>();
		modele = new gestModele();
                this.ihm=ihm;
	}

        /**Contructeur de la classe
         *
         */
        public gestControler(){
            activation = new ArrayList<ArrayList<ArrayList<double[]>>>();
            classif = new ArrayList<Pair<Integer,Integer>>();
            modele = new gestModele();
        }


        /**
         *  Méthode transmettant au modele les paramètres de l'expérience de Curriculum rentré dans l'ihm
         * @param nomFic nom du fichier expèrience
         * @param learningRate epsilon pour la descente de gradient de l'apprentissage
         * @param save  booleen pour indiquer si l'on veut sauvegarder ou pas le PMC
         * @param curric booleen pour indiquer si l'on veut experience avec un comparatif de l'apprentissage avec curric ou pas.
         * @param nbIterations nombre d'iterations d'apprentissage
         * @param nbApprentissage le nombre d'exemple donnes en apprentissage
         * @param nbTest le nombre d'exemple donnes en test
         * @param nbInputsInit le nombre d'entrees pour chaque exemple, premiere valeur testee         
         * @param nbInputsMax le nombre d'entrees pour chaque exemple, valeur maximum testee
         * @param pasInput le pas entre chaque valeur d'input testee
         * @return
         */
         public boolean genererExperienceCurric(String nomFic, int nbInputsInit, int nbInputsMax, int pasInput, double learningRate, boolean save, int nbIterations, int nbApprentissage, int nbTest)
        {
                return modele.genererExperienceCurric(nomFic, save, nbApprentissage, nbTest, nbInputsInit, nbInputsMax, pasInput, nbIterations, learningRate);
        }

        /**
         * Méthode transmettant au modele les parametre pour générer une experience
         * @param train indique le type de boucle d'apprentissage , for ou trainer torch
         * @param NomFic nom du fichier de l'experience
         * @param nbIn nombre d'entree du PMC
         * @param nbOut nombre de sorties du PMC
         * @param listeCouche tableau contenant le nombre de neurones par couche
         * @param fichiersData tableau contenant le chemin des fichiers de données
         * @param sparse booleen indiquant le format des données
         * @param epsilon pas de la descente de gradient
         * @param autoEncode booleen indiquant si l'on veut préentrainer le PMC avec un autoencodeur
         * @param save pour indiquer si l'on veut sauvegarder le pmc
         * @return
         */
	public boolean genererExperience(boolean train,String NomFic,int nbIn, int nbOut, ArrayList<Integer> listeCouche, ArrayList<String> fichiersData, boolean sparse, double epsilon, boolean autoEncode, boolean save)
	{
		if(!train)
			return modele.genererExperienceTrain(NomFic, nbIn, nbOut,
					listeCouche, fichiersData,
					sparse, epsilon, autoEncode, save);
		else
			return modele.genererExperienceFor(NomFic, nbIn, nbOut,
					listeCouche, fichiersData,
					sparse, epsilon, autoEncode, save);
	}
	
	
        /**
         * Méthode qui permet de générer un fichier expérience avec chargement d'un réseau de neurones déjà appris.
         * @param NomFic nom de l'expérience
         * @param nbIn nombre d'entrée
         * @param nbOut nombre de sorties
         * @param pmc chemin du fichier contenant le PMC
         * @param sparse pour indiquer le format des fichiers
         * @param fichiersData liste des chemins des fichiers contenant les données
         * @param epsilon pas de la descente de gradient
         * @return
         */
	public boolean genererPMC(String NomFic, int nbIn, int nbOut, String pmc, boolean sparse,ArrayList<String> fichiersData, double epsilon)
	{
		return modele.genererPMC(NomFic, nbIn, nbOut, pmc, sparse, fichiersData, epsilon);
	}


        /**
         * Execute un expérience dont le fichier existe déjaà
         * @param arg nom de l'experience
         * @return
         */
	public boolean executeExp(String arg) 
	{
		File file = new File(arg);
		modele.executerExp(file);
		return true;
	}

	
	private int[] calculStatCouche(double[] tab)
	{
		int[] res = new int[9];
		for(int i = 0; i < res.length; i++)
				res[i] = 0;
		
		for(int i = 0; i < tab.length; i++)
		{
			int j = (int)((tab[i] + 1) / 0.25);
			res[j]++;
		}
		return res;
	}
	
	private ArrayList<int[]> getStatEtat(ArrayList<double[]> x)
	{
		ArrayList<int[]> res = new ArrayList<int[]>();
		
		for(int i = 0; i < x.size(); i++)
			res.add(calculStatCouche(x.get(i)));
		return res;
	}
	//couches<couche>
	public ArrayList<ArrayList<int[]>> getStatExemple(ArrayList<ArrayList<double[]>> x)
	{       
		ArrayList<ArrayList<int[]>> res = new ArrayList<ArrayList<int[]>>();
		for(int i = 0; i < x.size(); i++)
			res.add(getStatEtat(x.get(i)));
		
		return res;
	}
	
	public ArrayList<ArrayList<ArrayList<int[]>>> getStatBase(ArrayList<ArrayList<ArrayList<double[]>>> x)
	{
		ArrayList<ArrayList<ArrayList<int[]>>> res = new ArrayList<ArrayList<ArrayList<int[]>>>();
		for(int i = 0; i < x.size(); i++)
			res.add(getStatExemple(x.get(i)));
		return res;
	}
	
	private int[] SommeTab(int[] x, int[] y)
	{
		int[] res = x;
		for(int i = 0; i < x.length; i++)
		{
			res[i] = x[i] + y[i];
		}
		return res;
	}
	
	private ArrayList<int[]> Somme(ArrayList<int[]> x, ArrayList<int[]> y)
	{
		ArrayList<int[]> res = x;
		for(int i = 0; i < x.size(); i++)
		{
			res.set(i, SommeTab(x.get(i),y.get(i)));
		}
		return res;
	}

	private ArrayList<ArrayList<int[]>> DivTab(ArrayList<ArrayList<int[]>> x, int taille)
	{
		ArrayList<ArrayList<int[]>> res = x;
		for(int i = 0; i < x.size(); i++){
			for(int j = 0; j < x.get(i).size(); j++){
				for(int z = 0; z < x.get(i).get(j).length; z ++)
				{
					res.get(i).get(j)[z] = (int)(res.get(i).get(j)[z] / taille);
				}
			}
		}
		return res;
	}
	//iteration<couches<couche>>
	public ArrayList<ArrayList<int[]>> getStatMoyBase(ArrayList<ArrayList<ArrayList<double[]>>> x)
	{
		ArrayList<ArrayList<ArrayList<int[]>>> x_temp = getStatBase(x);
		ArrayList<ArrayList<int[]>> res = x_temp.get(0);
		for(int i = 0; i < res.size(); i++)
		{
			for(int j = 0; j < x_temp.size(); j++)
			{
				res.set(i, Somme(res.get(i), x_temp.get(j).get(i)));
			}
		}
		
		return DivTab(res,x_temp.size());
 	}

        /**
         * Méthode envoyant au modele les infos pour la génération de données
         * @param name le nom du fichier de données
         * @param level le niveau de difficultés souhaité (1 à 3)
         * @param size format des données nombres de composantes
         * @param nb nombre de données à générer
         * @return
         */
	public boolean genereDataSet(String name,int level, int size, int nb)
	{
		return modele.genereDataSet(name,level,size,nb);
		
	}
	

        /**
         * Gestion des évènements.
         * @param ev
         */
        public void actionPerformed(final ActionEvent ev){

		String nom = ev.getActionCommand();
		
		
		if(nom.equals("fermer")){
			System.exit(0);
		}
		else if(nom.equals("lancer")){

                    if(!ihm.getCurricBox().isSelected()){
                        ihm.getHaut().removeAll();
                        ihm.setNomExp(ihm.getNomExperience().getText());
                        executeExp(ihm.getNomExp());
                        ihm.initPanneauCouches();
                        ihm.setNbCouches(ihm.getActivations().get(0).get(0).size());
                        ihm.initTabNbNeur();
                        ihm.calculStat();
                        ihm.getImgEntree().setText(ihm.getClassification().get(ihm.getExempleActuel()).fst().toString());
                        ihm.getJlabclassif().setText(ihm.getClassification().get(ihm.getExempleActuel()).snd().toString());
                        ihm.getStatlabinfo().setText("Kmeans pourcentage clustering couche " + (ihm.getKmeansCouCourant() + 1));
                        ihm.getStatlabinfo().updateUI();
                        ihm.setNbIterationsMax(ihm.getActivations().get(0).size());
                        ihm.getStatfree().updateUI();
                        ihm.getHaut().updateUI();
                        ihm.getCouches().updateUI();
                        ihm.getJlabclassif().updateUI();
                        ihm.calculKmeans();
                        ihm.initpanneauKmeans(ihm.getArrayHistoKmeans(), ihm.getKmeansCouCourant() + 1);
                    }
                    else
                       {
                        ihm.setNomExp(ihm.getNomExperience().getText());
                        executeExp(ihm.getNomExp());
                        ihm.initpanneauCourbeCurric();
                    }

		 }
		else if(nom.equals("arreter")){
			System.exit(0);
		}
                else if(nom.equals("Permut stat")){
                         if(ihm.getPermutname().equals("kmeans")){
                            ihm.setPermutname("distribution");
                        }
                        else if(ihm.getPermutname().equals("distribution")){
                            ihm.setPermutname("erreur");
                        }
                        else{
                             ihm.setPermutname("kmeans");
                        }
                        ihm.permuter(ihm.getPermutname());
		}
		else if(nom.equals("NbCouches")){

			ihm.setNbCouches(Integer.parseInt(ihm.getNbCouchesJTF().getText()));

			ihm.initListeCouches(ihm.getNbCouches());
			ihm.getParam().updateUI();
		}
		else if(nom.equals("learningRate")){
			ihm.setEpsilon(Double.parseDouble(ihm.getLearningRate().getText()));
		}
		else if(nom.equals("saveNN")){
			ihm.setSave(ihm.getSaveBox().isSelected());
		}
		else if(nom.equals("Ouvrir PMC")){
			ihm.setCheminFichierPMC("");
			ihm.setPMCChooser(new JFileChooser());
			ihm.getPMCChooser().setDialogTitle( "Titre" );
			ihm.getPMCChooser().setMultiSelectionEnabled( false );
			ihm.getPMCChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getPMCChooser().showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setCheminFichierPMC(ihm.getPMCChooser().getSelectedFile().getPath());
			}
			ihm.getNomPMCField().setText(ihm.getCheminFichierPMC());
		}
		else if(nom.equals("traintype")){
			ihm.setTrain(ihm.getTrainBox().isSelected());
		}
		else if(nom.equals("AutoEncode")){
			ihm.setAutoEncode(ihm.getAutoEncodeBox().isSelected());
		}
		else if(nom.equals("NomPMC")){
			ihm.setNomPMC(ihm.getNomPMCField().getText());

                }
                 else if(nom.equals("Kmeans precedente")){
                         if(ihm.getKmeansCouCourant()>0){
                             ihm.setKmeansCouCourant(ihm.getKmeansCouCourant()-1);
                             ihm.getStatfree().removeAll();
                             if(ihm.getPermutname().equals("kmeans")){
                             
                             }
                             else{
                                 ihm.getStatlabinfo().setText("Distribution representant cluster Couche "+ (ihm.getKmeansCouCourant()+1));
                                 ihm.majpanneauCourbeKmeans();
                                 ihm.getStatlabinfo().updateUI();
                                 ihm.getStatfree().updateUI();
                             }

                         }
		 }
                 else if(nom.equals("Kmeans suivante")){

                     if(ihm.getKmeansCouCourant()<ihm.getNbCouches()-1){
                             ihm.setKmeansCouCourant(ihm.getKmeansCouCourant()+1);
                             ihm.getStatfree().removeAll();
                             if(ihm.getPermutname().equals("kmeans")){
                                
                             }
                             else{
                                 ihm.majpanneauCourbeKmeans();
                                 ihm.getStatlabinfo().setText("Distribution representant cluster Couche "+ (ihm.getKmeansCouCourant()+1));
                                 ihm.getStatlabinfo().updateUI();
                                 ihm.getStatfree().updateUI();
                             }
                    }
                }
		else if(nom.equals("sparseBox")){
			if(ihm.getSparse().isSelected()){
				ihm.getMilieu().remove(ihm.getNonchargeSparse());
				ihm.getMilieu().add(ihm.getChargeSparse());
				ihm.setSparsebool(true);
				ihm.getMilieu().updateUI();

			}
			else{
				ihm.getMilieu().remove(ihm.getChargeSparse());
				ihm.getMilieu().add(ihm.getNonchargeSparse());
				ihm.setSparsebool(false);
                                ihm.getMilieu().updateUI();
				

			}

		}
		else if(nom.equals("PMCBox")){
			if(ihm.getPMCBox().isSelected()){

				ihm.getParam().remove(ihm.getChampsnbcouches());
				ihm.initFieldChargePMC();
				ihm.getParam().updateUI();
			}
			else{
				ihm.getParam().removeAll();
				ihm.getChampsnbcouches().removeAll();
				ihm.getNonchargeSparse().add(ihm.getNonsparseApp());
				ihm.getNonchargeSparse().add(ihm.getNonsparseAppY());
				ihm.getChargeSparse().add(ihm.getSparseApp());
				ihm.initFieldNbCouches();
				ihm.getParam().updateUI();

			}

		}
                else if(nom.equals("Curric")){
			if(ihm.getCurricBox().isSelected()){

				ihm.getParam().remove(ihm.getChampsnbcouches());
                                ihm.initFieldCurric();
				ihm.getParam().updateUI();

			}
			else{
				ihm.getParam().removeAll();
				ihm.getChampsnbcouches().removeAll();
				ihm.getNonchargeSparse().add(ihm.getNonsparseApp());
				ihm.getNonchargeSparse().add(ihm.getNonsparseAppY());
				ihm.getChargeSparse().add(ihm.getSparseApp());
				ihm.initFieldNbCouches();
				ihm.getParam().updateUI();

			}

		}

		else if(nom.equals("Suivant e")){
			if((ihm.getExempleActuel()<ihm.getNbExempleMax()-1)){
				ihm.setExempleActuel(ihm.getExempleActuel()+1);
				ihm.getCouches().maj(ihm.getIterationActuel(),ihm.getExempleActuel(),ihm.getHaut().getHeight());
				ihm.getImgEntree().setText(ihm.getClassification().get(ihm.getExempleActuel()).fst().toString());
				ihm.getJlabclassif().setText(ihm.getClassification().get(ihm.getExempleActuel()).snd().toString());
				ihm.getJlabclassif().updateUI();
				ihm.getImEntree().updateUI();
				ihm.getCouches().updateUI();

			}

		}
		else if(nom.equals("Precedent e")){
			if((ihm.getExempleActuel()>0)){
				ihm.setExempleActuel(ihm.getExempleActuel()-1);
				ihm.getCouches().maj(ihm.getIterationActuel(),ihm.getExempleActuel(),ihm.getHaut().getHeight());
				ihm.getImgEntree().setText(ihm.getClassification().get(ihm.getExempleActuel()).fst().toString());
				ihm.getJlabclassif().setText(ihm.getClassification().get(ihm.getExempleActuel()).snd().toString());
				ihm.getJlabclassif().updateUI();
				ihm.getImgEntree().updateUI();
				ihm.getCouches().updateUI();

			}

		}
		else if(nom.equals("Suivant i")){
			if(ihm.getIterationActuel()<ihm.getNbIterationsMax()-1){
                               
				ihm.setIterationActuel(ihm.getIterationActuel()+1);
                                ihm.getCouches().maj(ihm.getIterationActuel(),ihm.getExempleActuel(),ihm.getHaut().getHeight());
                                ihm.getCouches().updateUI();
			}

		}
		else if(nom.equals("Precedent i")){
			if(ihm.getIterationActuel()>0){
                                
				ihm.setIterationActuel(ihm.getIterationActuel()-1);
                                ihm.getCouches().maj(ihm.getIterationActuel(),ihm.getExempleActuel(),ihm.getHaut().getHeight());
                                ihm.getCouches().updateUI();
			}
		}
		else if(nom.equals("boutonXApp")){
			ihm.setChemainFichierXApp("");
			ihm.setSparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getSparseChooser().setDialogTitle( "Titre" );
			ihm.getSparseChooser().setMultiSelectionEnabled( false );
			ihm.getSparseChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getSparseChooser().showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierXApp(ihm.getSparseChooser().getSelectedFile().getPath());
			}
			ihm.getSparseChooserFieldApp().setText(ihm.getChemainFichierXApp());

		}
		else if(nom.equals("boutonXTest")){
			ihm.setChemainFichierXTest( "");
			ihm.setSparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getSparseChooser().setDialogTitle( "Titre" );
			ihm.getSparseChooser().setMultiSelectionEnabled( false );
			ihm.getSparseChooser().setApproveButtonToolTipText( "" );
			int choix =ihm.getSparseChooser().showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierXTest(ihm.getSparseChooser().getSelectedFile().getPath());
			}
			ihm.getSparseChooserFieldTest().setText(ihm.getChemainFichierXTest());

		}
		else if(nom.equals("boutonXAppns")){
			ihm.setChemainFichierXApp("");
			ihm.setNonsparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getNonsparseChooser().setDialogTitle( "Titre" );
			ihm.getNonsparseChooser().setMultiSelectionEnabled( false );
			ihm.getNonsparseChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getNonsparseChooser() .showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierXApp(ihm.getNonsparseChooser().getSelectedFile().getPath());
			}
			ihm.getNonsparseChooserFieldApp().setText(ihm.getChemainFichierXApp());

		}
		else if(nom.equals("boutonYAppns")){
			ihm.setChemainFichierYApp("");
			ihm.setNonsparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getNonsparseChooser().setDialogTitle( "Titre" );
			ihm.getNonsparseChooser().setMultiSelectionEnabled( false );
			ihm.getNonsparseChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getNonsparseChooser() .showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierYApp(ihm.getNonsparseChooser().getSelectedFile().getPath());
			}
			ihm.getNonsparseChooserFieldAppY().setText(ihm.getChemainFichierYApp());

		}
		else if(nom.equals("boutonXTestns")){
			ihm.setChemainFichierXTest("");
			ihm.setNonsparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getNonsparseChooser().setDialogTitle( "Titre" );
			ihm.getNonsparseChooser().setMultiSelectionEnabled( false );
			ihm.getNonsparseChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getNonsparseChooser() .showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierXTest(ihm.getNonsparseChooser().getSelectedFile().getPath());
			}
			ihm.getNonsparseChooserFieldTest().setText(ihm.getChemainFichierXTest());

		}
		else if(nom.equals("boutonYTestns")){
			ihm.setChemainFichierYTest("");
			ihm.setNonsparseChooser(new JFileChooser("./PIADGSM/DataSet"));
			ihm.getNonsparseChooser().setDialogTitle( "Titre" );
			ihm.getNonsparseChooser().setMultiSelectionEnabled( false );
			ihm.getNonsparseChooser().setApproveButtonToolTipText( "" );
			int choix = ihm.getNonsparseChooser() .showOpenDialog( null );
			if (choix == JFileChooser. APPROVE_OPTION ) {
				ihm.setChemainFichierYTest(ihm.getNonsparseChooser().getSelectedFile().getPath());
			}
			ihm.getNonsparseChooserFieldTestY().setText(ihm.getChemainFichierYTest());

		}
		else if(nom.equals("Experience")){
			ihm.setNomExp(ihm.getNomExperience().getText());
		}
		else if(nom.equals("genererData")){
			//this.dispose();
			//this.build();
			//this.validate();
			actionListener action = new actionListener();
			action.lancer();
		}
		else if(nom.equals("genererExp"))
		{
			ihm.setNomExp(ihm.getNomExperience().getText());
			ihm.setEpsilon(Double.parseDouble(ihm.getLearningRate().getText()));
			ihm.setListe_chemin(new ArrayList<String>());
			if(ihm.getSparse().isSelected()){
				ihm.getListe_chemin().add(ihm.getChemainFichierXApp());
				ihm.getListe_chemin().add(ihm.getChemainFichierXTest());
			}
			else{
				ihm.getListe_chemin().add(ihm.getChemainFichierXApp());
				ihm.getListe_chemin().add(ihm.getChemainFichierYApp());
				ihm.getListe_chemin().add(ihm.getChemainFichierXTest());
				ihm.getListe_chemin().add(ihm.getChemainFichierYTest());
			}
			if (ihm.getPMCBox().isSelected() == false && ihm.getCurricBox().isSelected()==false){
				ihm.setParamCouches(new ArrayList<Integer>());

				for(int i=0;i<ihm.getJtf().size();i++){
					if(!ihm.getJtf().get(i).getText().equals("")){
						try{
							int u = Integer.parseInt(ihm.getJtf().get(i).getText());
							ihm.getParamCouches().add(i,u);
						}
						catch(Exception e){
							System.err.println("Format de donn�e incorrect");
						}
					}
					else{
						System.out.println("champs vide");
					}
				}
				ihm.setNbIn(Integer.parseInt(ihm.getNbEntree().getText()));
				ihm.setNbOut(Integer.parseInt(ihm.getNbSortie().getText()));

				genererExperience(ihm.isTrain(),ihm.getNomExp(),ihm.getNbIn(),ihm.getNbOut(),ihm.getParamCouches(),ihm.getListe_chemin(),ihm.isSparsebool(),ihm.getEpsilon(),ihm.isAutoEncode(),ihm.isSave());
			}
			else if(ihm.getPMCBox().isSelected() == true)
			{
				ihm.setNbIn(Integer.parseInt(ihm.getNbEntree().getText()));
				ihm.setNbOut(Integer.parseInt(ihm.getNbSortie().getText()));

				genererPMC(ihm.getNomExp(), ihm.getNbIn(), ihm.getNbOut(), ihm.getCheminFichierPMC(),ihm.isSparsebool(), ihm.getListe_chemin(),ihm.getEpsilon());
			}
                        else if(ihm.getCurricBox().isSelected() == true){
                            
                            int nbit=Integer.parseInt(ihm.getNbIteration().getText());
                            int nbex=Integer.parseInt(ihm.getNbExemples().getText());
                            genererExperienceCurric(ihm.getNomExp(), Integer.parseInt(ihm.getNbIterationInit().getText()), Integer.parseInt(ihm.getNbIterationMax().getText()),Integer.parseInt(ihm.getPasInput().getText()),Double.parseDouble(ihm.getLearningRate().getText()),ihm.isSave(),Integer.parseInt(ihm.getNbIterationCurric().getText()),Integer.parseInt(ihm.getNbExempleApp().getText()),Integer.parseInt(ihm.getNbExemplesTest().getText()));
                        }
		}

	}
 }